package cn.me.fdfs.service.impl;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.csource.common.MyException;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.Query;
import org.hibernate.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import cn.me.fdfs.service.BaseService;
import cn.me.fdfs.service.WarningService;
import cn.me.fdfs.vo.PageInfo;
import cn.me.fdfs.vo.WarningData;
import cn.me.fdfs.vo.WarningUser;

/**
 * Created with IntelliJ IDEA. User: wanglt Date: 12-8-28 Time: 上午10:38 To change this template use
 * File | Settings | File Templates.
 */
@Service
public class WarningServiceImpl extends BaseService implements WarningService {
  private static final Logger logger = LoggerFactory.getLogger(WarningServiceImpl.class);

  @Override
  @Transactional(propagation = Propagation.REQUIRED)
  public void updateWarning(WarningData wd) throws IOException, MyException {
    // To change body of implemented methods use File | Settings | File Templates.
    Session session = getSession();
    session.saveOrUpdate(wd);
  }

  @Override
  @Transactional(propagation = Propagation.REQUIRED)
  public List<WarningData> findWarning() throws IOException, MyException {
    // To change body of implemented methods use File | Settings | File Templates.
    List<WarningData> warningDatas = new ArrayList<WarningData>();
    Session session = getSession();
    StringBuilder queryString = new StringBuilder("from WarningData as w");
    Query query = session.createQuery(queryString.toString());
    warningDatas = query.list();
    return warningDatas;
  }

  @Override
  @Transactional(propagation = Propagation.REQUIRED)
  public List<WarningData> findWarning(WarningData wd, PageInfo pageInfo) throws IOException, MyException {
    // To change body of implemented methods use File | Settings | File Templates.
    List<WarningData> warningDatas = new ArrayList<WarningData>();
    Session session = getSession();
    StringBuilder queryString = new StringBuilder("from WarningData as wd ");
    if (StringUtils.isNotBlank(wd.getWdIpAddr())) {
      queryString.append("where wd.wdIpAddr like '%" + wd.getWdIpAddr() + "%'");
    }
    Query query = session.createQuery(queryString.toString());
    pageInfo.setTotalCount(query.list().size());
    query.setMaxResults(pageInfo.getNumPerPage());
    query.setFirstResult((pageInfo.getPageNum() - 1) * pageInfo.getNumPerPage());
    warningDatas = query.list();
    return warningDatas;
  }

  @Override
  @Transactional(propagation = Propagation.REQUIRED)
  public WarningData findById(String id) throws IOException, MyException {
    // To change body of implemented methods use File | Settings | File Templates.
    WarningData wd = new WarningData();
    Session session = getSession();
    wd = (WarningData) session.get(WarningData.class, id);
    return wd;
  }

  @Override
  @Transactional(propagation = Propagation.REQUIRED)
  public void delWarning(String id) throws IOException, MyException {
    // To change body of implemented methods use File | Settings | File Templates.
    WarningData wd = new WarningData();
    wd.setId(id);
    Session session = getSession();
    session.delete(wd);
  }

  @Override
  @Transactional(propagation = Propagation.REQUIRED)
  public List<WarningData> findByIp(String ip) throws IOException, MyException {
    // To change body of implemented methods use File | Settings | File Templates.
    List<WarningData> warningDatas = new ArrayList<WarningData>();
    Session session = getSession();
    Query query = session.createQuery("from WarningData wd where wd.wdIpAddr=:ip");
    warningDatas = query.setString("ip", ip).list();
    return warningDatas;
  }

  @Override
  @Transactional(propagation = Propagation.REQUIRED)
  public List<WarningUser> findWarUser() throws IOException, MyException {
    // To change body of implemented methods use File | Settings | File Templates.
    List<WarningUser> warningUsers = new ArrayList<WarningUser>();
    Session session = getSession();
    StringBuilder queryString = new StringBuilder("from WarningUser as w");
    Query query = session.createQuery(queryString.toString());
    warningUsers = query.list();
    return warningUsers;
  }

  @Override
  @Transactional(propagation = Propagation.REQUIRED)
  public List<WarningUser> findWarUser(WarningUser wu, PageInfo pageInfo) throws IOException, MyException {
    // To change body of implemented methods use File | Settings | File Templates.
    List<WarningUser> warningUsers = new ArrayList<WarningUser>();
    Session session = getSession();
    StringBuilder queryString = new StringBuilder("from WarningUser as w ");
    if (StringUtils.isNotBlank(wu.getName())) {
      queryString.append("where w.name like '%" + wu.getName() + "%'");
    }
    Query query = session.createQuery(queryString.toString());
    pageInfo.setTotalCount(query.list().size());
    query.setMaxResults(pageInfo.getNumPerPage());
    query.setFirstResult((pageInfo.getPageNum() - 1) * pageInfo.getNumPerPage());
    warningUsers = query.list();
    return warningUsers;
  }

  @Override
  @Transactional(propagation = Propagation.REQUIRED)
  public WarningUser findUserId(String id) throws IOException, MyException {
    // To change body of implemented methods use File | Settings | File Templates.
    WarningUser wu = new WarningUser();
    Session session = getSession();
    wu = (WarningUser) session.get(WarningUser.class, id);
    return wu;
  }

  @Override
  @Transactional(propagation = Propagation.REQUIRED)
  public void delWarUser(String id) throws IOException, MyException {
    // To change body of implemented methods use File | Settings | File Templates.
    WarningUser wu = new WarningUser();
    wu.setId(id);
    Session session = getSession();
    session.delete(wu);
  }

  @Override
  @Transactional(propagation = Propagation.REQUIRED)
  public void updateWarUser(WarningUser wu) throws IOException, MyException {
    // To change body of implemented methods use File | Settings | File Templates.
    Session session = getSession();
    session.saveOrUpdate(wu);
  }
}
